package com.lsf.common.api;

import com.alibaba.fastjson.JSONObject;
import com.lsf.modules.base.vo.LoginUser;
import com.lsf.modules.base.vo.PermissionDataRuleModel;
import com.lsf.modules.base.vo.UserCacheInfo;

import java.util.List;
import java.util.Set;

/**
 * @author Alexander
 */
public interface CommonApi {

    /**
     * 查询用户角色
     *
     * @param username 用户名
     * @return {@link Set}<{@link String}>
     */
    Set<String> queryUserRoles(String username);

    /**
     * 查询用户权限信息
     *
     * @param username 用户名
     * @return {@link Set}<{@link String}>
     */
    Set<String> queryUserAuths(String username);

    /**
     * 根据用户账号查询用户信息
     *
     * @param username 用户名
     * @return {@link LoginUser}
     */
    LoginUser getUserByName(String username);

    /**
     * 根据用户id查询用户信息
     *
     * @param id id
     * @return {@link LoginUser}
     */
    LoginUser getUserById(String id);

    /**
     * 通过用户账号查询角色结合
     *
     * @param username 用户名
     * @return {@link List}<{@link String}>
     */
    List<String> getRolesByName(String username);

    /**
     * 查询权限数据规则
     *
     * @param component   组件
     * @param requestPath 请求路径
     * @param username    用户名
     * @return {@link List}<{@link PermissionDataRuleModel}>
     */
    List<PermissionDataRuleModel> queryPermissionDataRule(String component, String requestPath, String username);

    /**
     * 根据用户id分页查询用户
     *
     * @param userIds
     * @param pageNo
     * @param pageSize
     * @return {@link JSONObject}
     */
    JSONObject queryAllUser(String userIds, Integer pageNo,Integer pageSize);

    /**
     * 通过账号查询角色id集合
     *
     * @param username 用户名
     * @return {@link List}<{@link String}>
     */
    List<String> getRoleIdsByName(String username);

    /**
     * 获取用户的角色集合
     *
     * @param username 用户名
     * @return {@link Set}<{@link String}>
     */
    Set<String> getUserRoleSet(String username);

    /**
     * 获取用户的权限集合
     *
     * @param username 用户名
     * @return {@link Set}<{@link String}>
     */
    Set<String> getUserPermissionSet(String username);

}
